package com.zhu.instructions.math;

// instructions/math/ISHR.java
import com.zhu.instructions.base.NoOperandsInstruction;
import com.zhu.rtda.Frame;
import com.zhu.rtda.OperandStack;

/**
 * 指令：ishr
 *
 * 操作数：无
 *
 * 功能：
 *  将栈顶的两个 int 值进行算术右移：value1 >> value2
 *  算术右移会进行符号扩展（正数补0，负数补1）
 *
 * 栈变化：
 *      ..., value1, value2 → ..., result
 *
 * 示例：
 *  (-8) >> 1 = -4
 *
 * 注意：
 *  - value2 只取低 5 位（& 0x1f）
 */
public class ISHR extends NoOperandsInstruction {
    @Override
    public void execute(Frame frame) {
        OperandStack stack = frame.getOperandStack();
        int v2 = stack.popInt(); // 位移量
        int v1 = stack.popInt(); // 被移动值

        int s = v2 & 0x1f;
        int result = v1 >> s; // 算术右移（带符号扩展）
        stack.pushInt(result);
    }
}
